home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / rascal.arc / TEST.BAS < prev    next >
BASIC Source File  |  1985-08-03  |  18KB  |  554 lines

  1.   10  'CHARS.RAS   8-03-85   2:27p  464 lines
  2.   12  GOSUB 70
  3.   20  GOSUB 4170
  4.   30  END
  5.   40  'CHARS.RAS: Display all the PC's screen characters, modified from 
  6.   50  '           Peter Norton's book. 
  7.   60  'Rascal Program Debugger, version 1.00  (C) Copyright 1983 Marty Franz 
  8.   70  'PROCEDURE DEBUG.SETUP
  9.   80  'Set up stack of procedure names 
  10.   90  DB.NPROCS = 10 
  11.  100  DIM DB.LABEL$(DB.NPROCS),DB.LINE(DB.NPROCS) 
  12.  110  'Set up cursor and output variables 
  13.  120  DB.STATUS.LINE = 25 
  14.  130  DB.CUROFF = 0 : DB.CURON = 1 
  15.  140  DB.BLINK = 5 : DB.CURCNT = DB.BLINK 
  16.  150  DB.CURSOR$ = CHR$(&H5F) 
  17.  160  DB.BKSP$ = CHR$(8) 
  18.  170  DB.RET$ = CHR$(13) 
  19.  180  DB.TLBOX$ = CHR$(&HC9) : DB.TRBOX$ = CHR$(&HBB) 
  20.  190  DB.BLBOX$ = CHR$(&HC8) : DB.BRBOX$ = CHR$(&HBC) 
  21.  200  DB.TOP$ = CHR$(&HCD)   : DB.SIDE$ = CHR$(&HBA) 
  22.  210  DB.MASK$ = "\                              \" 
  23.  220  'String for proofing labels input as breakpoints 
  24.  230  DB.LABCHRS$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789." 
  25.  240  'Establish error and key trapping (F10 stops debugger) 
  26.  250  ON ERROR GOTO 370
  27.  260  ON KEY(10) GOSUB 410
  28.  270  KEY OFF 
  29.  280  KEY (10) ON 
  30.  290  DB.LEVEL = 0                'No procedures entered yet 
  31.  300  DB.BPOINT = 0                'No breakpoints in effect 
  32.  310  DB.CMDSTOP = 0                'No command keyboard stops 
  33.  320  GOSUB 440
  34.  330  GOSUB 2340
  35.  340  GOSUB 2290
  36.  350  GOSUB 1110
  37.  360  RETURN
  38.  370  'Error routine for BASIC errors 'DB.BASIC.ERROR|
  39.  380  GOSUB 610
  40.  390  GOSUB 1110
  41.  400  RESUME 
  42.  410  'PROCEDURE DEBUG.KEYBD.STOP        'Entered when F10 pressed
  43.  420  DB.CMDSTOP = 1 
  44.  430  RETURN
  45.  440  'PROCEDURE DEBUG.HELLO            'Tell user available functions
  46.  450  CLS 
  47.  460  PRINT "Rascal Program Debugger active..." 
  48.  470  PRINT 
  49.  480  PRINT "You can enter the debugger by:" 
  50.  490  PRINT  
  51.  500  PRINT "   1. Pressing F10 during program execution," 
  52.  510  PRINT "   2. Setting a procedure breakpoint with the B command," 
  53.  520  PRINT "   3. Your program causing a BASIC error." 
  54.  530  PRINT 
  55.  540  PRINT "In the debugger, you can type:" 
  56.  550  PRINT 
  57.  560  PRINT "   X  to exit into BASIC (type CONT to go back)," 
  58.  570  PRINT "   D  to list the Rascal procedures called," 
  59.  580  PRINT "   B  to set a procedure breakpoint," 
  60.  590  PRINT "   G  to resume your program's execution" 
  61.  600  RETURN
  62.  610  'PROCEDURE DEBUG.BASIC.ERROR        'Process BASIC errors
  63.  620  COLOR 15,0 
  64.  630  LOCATE DB.STATUS.LINE,1,CUROFF 
  65.  640  PRINT USING "##### ";ERL; 
  66.  650  DB.ERROR = ERR 
  67.  660  IF NOT(DB.ERROR > 77) THEN 680
  68.  670  DB.ERROR = 77 
  69.  680  GOSUB 720
  70.  690  LOCATE ,,CURON 
  71.  700  COLOR 7,0 
  72.  710  RETURN
  73.  720  'PROCEDURE DEBUG.ERROR.MSG        'Decode BASIC error msg
  74.  730  RESTORE 2400
  75.  740  READ DB.ERR.KEY,DB.ERROR.MSG$ 
  76.  750  IF NOT(DB.ERR.KEY = DB.ERROR) THEN 770
  77.  760  GOTO 780
  78.  770  IF NOT(DB.ERR.KEY = 77) THEN 740
  79.  780  PRINT USING DB.MASK$;DB.ERROR.MSG$ 
  80.  790  RETURN
  81.  800  'PROCEDURE DEBUG.PROC            'Handle procedure call
  82.  810  GOSUB 2340
  83.  820  DB.LEVEL = DB.LEVEL + 1 
  84.  830  DB.LABEL$(DB.LEVEL) = DEBUG.LABEL$ 
  85.  840  DB.LINE(DB.LEVEL) = DEBUG.LINE 
  86.  850  GOSUB 1000
  87.  860  IF NOT(DB.BPOINT = 1 AND DB.BPLABEL$ = DEBUG.LABEL$) THEN 880
  88.  870  DB.CMDSTOP = 1 
  89.  880  IF NOT(DB.CMDSTOP = 1) THEN 920
  90.  890  GOSUB 2240
  91.  900  GOSUB 1110
  92.  910  DB.CMDSTOP = 0 
  93.  920  GOSUB 2370
  94.  930  RETURN
  95.  940  'PROCEDURE DEBUG.ENDP            'Handle procedure exit
  96.  950  GOSUB 2340
  97.  960  DB.LEVEL = DB.LEVEL - 1 
  98.  970  GOSUB 1000
  99.  980  GOSUB 2370
  100.  990  RETURN
  101. 1000  'PROCEDURE DEBUG.TRACE.MSG        'Display procedure and line
  102. 1010  COLOR 15,0 
  103. 1020  LOCATE DB.STATUS.LINE,1,CUROFF 
  104. 1030  IF NOT(DB.LEVEL > 0) THEN 1070
  105. 1040  PRINT USING "##### ";DB.LINE(DB.LEVEL); 
  106. 1050  PRINT USING DB.MASK$;DB.LABEL$(DB.LEVEL); 
  107. 1060  GOTO 1080
  108. 1070  PRINT USING DB.MASK$;"Exit"; 
  109. 1080  LOCATE ,,CURON 
  110. 1090  COLOR 7,0 
  111. 1100  RETURN
  112. 1110  'PROCEDURE DEBUG.CMD                'Get and process commands
  113. 1120  DB.DONE = 0 
  114. 1130  GOSUB 1180
  115. 1140  GOSUB 1250
  116. 1150  IF NOT(DB.DONE = 1) THEN 1130
  117. 1160  GOSUB 2240
  118. 1170  RETURN
  119. 1180  'PROCEDURE DEBUG.GET.CMD         'Get and proof debugger command
  120. 1190  GOSUB 2240
  121. 1200  PRINT "debug: "; 
  122. 1210  GOSUB 1900
  123. 1220  DB.ISKEY = INSTR("BDGX",DB.KEY$) 
  124. 1230  IF NOT(DB.ISKEY > 0) THEN 1210
  125. 1240  RETURN
  126. 1250  'PROCEDURE DEBUG.DO.CMD            'Call procedure for each command
  127. 1260  IF NOT(DB.KEY$ = "G") THEN 1290
  128. 1270  DB.DONE = 1 
  129. 1280  GOTO 1390
  130. 1290  IF NOT(DB.KEY$ = "X") THEN 1320
  131. 1300  GOSUB 1400
  132. 1310  GOTO 1390
  133. 1320  IF NOT(DB.KEY$ = "B") THEN 1350
  134. 1330  GOSUB 1460
  135. 1340  GOTO 1390
  136. 1350  IF NOT(DB.KEY$ = "D") THEN 1380
  137. 1360  GOSUB 1560
  138. 1370  GOTO 1390
  139. 1380  BEEP 
  140. 1390  RETURN
  141. 1400  'PROCEDURE DEBUG.DO.STOP         'Handle exit to BASIC
  142. 1410  PRINT "exit to BASIC"; 
  143. 1420  GOSUB 2370
  144. 1430  PRINT : PRINT "Type CONT to go back to debugger..." 
  145. 1440  STOP 
  146. 1450  RETURN
  147. 1460  'PROCEDURE DEBUG.DO.BPOINT        'Set breakpoint
  148. 1470  GOSUB 2240
  149. 1480  PRINT "breakpoint: "; 
  150. 1490  GOSUB 1740
  151. 1500  DB.BPLABEL$ = DB.INPUT$ 
  152. 1510  IF NOT(LEN(DB.BPLABEL$) > 0) THEN 1540
  153. 1520  DB.BPOINT = 1 
  154. 1530  GOTO 1550
  155. 1540  DB.BPOINT = 0 
  156. 1550  RETURN
  157. 1560  'PROCEDURE DEBUG.DO.DUMP         'Dump stack of procedure calls
  158. 1570  PRINT "dump procedure stack"; 
  159. 1580  LOCATE 1,38 
  160. 1590  PRINT DB.TLBOX$; 
  161. 1600  FOR DB.I = 1 TO 40 : PRINT DB.TOP$; : NEXT DB.I 
  162. 1610  PRINT DB.TRBOX$ 
  163. 1620  FOR DB.I = DB.LEVEL TO 1 STEP -1 
  164. 1630  LOCATE ,38 
  165. 1640  PRINT DB.SIDE$;" "; 
  166. 1650  PRINT USING "##### ";DB.LINE(DB.I); 
  167. 1660  PRINT USING DB.MASK$;DB.LABEL$(DB.I); 
  168. 1670  PRINT " ";DB.SIDE$ 
  169. 1680  NEXT DB.I 
  170. 1690  LOCATE ,38 
  171. 1700  PRINT DB.BLBOX$; 
  172. 1710  FOR DB.I = 1 TO 40 : PRINT DB.TOP$; : NEXT DB.I 
  173. 1720  PRINT DB.BRBOX$; 
  174. 1730  RETURN
  175. 1740  'PROCEDURE DEBUG.GET.STRING        'Get label name for breakpoint
  176. 1750  DB.INPUT$ = "" 
  177. 1760  DB.START.COL = POS(0) 
  178. 1770  GOSUB 1900
  179. 1780  IF NOT(DB.KEY$ = DB.RET$) THEN 1810
  180. 1790  GOTO 1890
  181. 1800  GOTO 1880
  182. 1810  IF NOT(DB.KEY$ = DB.BKSP$) THEN 1840
  183. 1820  GOSUB 2040
  184. 1830  GOTO 1880
  185. 1840  IF NOT(INSTR(DB.LABCHRS$,DB.KEY$) > 0) THEN 1870
  186. 1850  GOSUB 1970
  187. 1860  GOTO 1880
  188. 1870  BEEP 
  189. 1880  IF NOT(1 = 0) THEN 1770
  190. 1890  RETURN
  191. 1900  'PROCEDURE DEBUG.GET.KEY         'Get uppercase key from keyboard
  192. 1910  GOSUB 2130
  193. 1920  DB.KEY$ = INKEY$ 
  194. 1930  IF NOT(LEN(DB.KEY$) > 0) THEN 1910
  195. 1940  IF NOT(ASC(DB.KEY$) > 96 AND ASC(DB.KEY$) < 123) THEN 1960
  196. 1950  DB.KEY$ = CHR$(ASC(DB.KEY$) - 32) 
  197. 1960  RETURN
  198. 1970  'PROCEDURE DEBUG.INS.CHAR        'Add char to end of breakpoint label
  199. 1980  IF NOT(POS(0) < 79) THEN 2020
  200. 1990  PRINT DB.KEY$; 
  201. 2000  DB.INPUT$ = DB.INPUT$ + DB.KEY$ 
  202. 2010  GOTO 2030
  203. 2020  BEEP 
  204. 2030  RETURN
  205. 2040  'PROCEDURE DEBUG.DEL.CHAR        'Handle backspace key in input
  206. 2050  DB.CUR.COL = POS(0) 
  207. 2060  IF NOT(DB.CUR.COL > DB.START.COL) THEN 2110
  208. 2070  DB.INPUT$ = LEFT$(DB.INPUT$,LEN(DB.INPUT$)-1) 
  209. 2080  PRINT " "; 
  210. 2090  LOCATE ,DB.CUR.COL-1 
  211. 2100  GOTO 2120
  212. 2110  BEEP 
  213. 2120  RETURN
  214. 2130  'PROCEDURE DEBUG.CURSOR            'Simulate BASIC cursor
  215. 2140  IF NOT(DB.CURCNT = DB.BLINK) THEN 2200
  216. 2150  IF NOT(DB.CURCHAR$ = DB.CURSOR$) THEN 2180
  217. 2160  DB.CURCHAR$ = " " 
  218. 2170  GOTO 2190
  219. 2180  DB.CURCHAR$ = DB.CURSOR$ 
  220. 2190  DB.CURCNT = 0 
  221. 2200  PRINT DB.CURCHAR$; 
  222. 2210  DB.CURCNT = DB.CURCNT + 1 
  223. 2220  LOCATE ,POS(0)-1 
  224. 2230  RETURN
  225. 2240  'PROCEDURE DEBUG.CLR.CMD         'Clear command area of status line
  226. 2250  LOCATE DB.STATUS.LINE,40,CUROFF 
  227. 2260  PRINT SPACE$(40); 
  228. 2270  LOCATE DB.STATUS.LINE,40,CURON 
  229. 2280  RETURN
  230. 2290  'PROCEDURE DEBUG.CLR.MSG         'Clear message area of status line
  231. 2300  LOCATE DB.STATUS.LINE,1,CUROFF 
  232. 2310  PRINT SPACE$(40); 
  233. 2320  LOCATE DB.STATUS.LINE,1,CURON 
  234. 2330  RETURN
  235. 2340  'PROCEDURE DEBUG.PUSH.CURSOR        'Save program's cursor
  236. 2350  DB.ROW = CSRLIN : DB.COL = POS(0) 
  237. 2360  RETURN
  238. 2370  'PROCEDURE DEBUG.POP.CURSOR        'Restore program's cursor
  239. 2380  LOCATE DB.ROW,DB.COL 
  240. 2390  RETURN
  241. 2400  'Table of BASIC error messages 'DB.ERROR.MSGS|
  242. 2410  DATA  1,"NEXT without FOR" 
  243. 2420  DATA  2,"Syntax error" 
  244. 2430  DATA  3,"RETURN without GOSUB" 
  245. 2440  DATA  4,"Out of data" 
  246. 2450  DATA  5,"Illegal function call" 
  247. 2460  DATA  6,"Overflow" 
  248. 2470  DATA  7,"Out of memory" 
  249. 2480  DATA  8,"Undefined line number" 
  250. 2490  DATA  9,"Subscript out of range" 
  251. 2500  DATA 10,"Duplicate definition" 
  252. 2510  DATA 11,"Division by zero" 
  253. 2520  DATA 12,"Illegal direct" 
  254. 2530  DATA 13,"Type mismatch" 
  255. 2540  DATA 14,"Out of string space" 
  256. 2550  DATA 15,"String too long" 
  257. 2560  DATA 16,"String formula too complex" 
  258. 2570  DATA 17,"Can't continue" 
  259. 2580  DATA 18,"Undefined user function" 
  260. 2590  DATA 19,"No RESUME" 
  261. 2600  DATA 20,"RESUME without error" 
  262. 2610  DATA 22,"Missing operand" 
  263. 2620  DATA 23,"Line buffer overflow" 
  264. 2630  DATA 24,"Device timeout" 
  265. 2640  DATA 25,"Device fault" 
  266. 2650  DATA 26,"FOR without NEXT" 
  267. 2660  DATA 27,"Out of paper" 
  268. 2670  DATA 29,"WHILE without WEND" 
  269. 2680  DATA 30,"WEND without WHILE" 
  270. 2690  DATA 50,"FIELD overflow" 
  271. 2700  DATA 51,"Internal error" 
  272. 2710  DATA 52,"Bad file number" 
  273. 2720  DATA 53,"File not found" 
  274. 2730  DATA 54,"Bad file mode" 
  275. 2740  DATA 55,"File already open" 
  276. 2750  DATA 57,"Device I/O error" 
  277. 2760  DATA 58,"File already exists" 
  278. 2770  DATA 61,"Disk full" 
  279. 2780  DATA 62,"Input past end" 
  280. 2790  DATA 63,"Bad record number" 
  281. 2800  DATA 64,"Bad file name" 
  282. 2810  DATA 66,"Direct statement in file" 
  283. 2820  DATA 67,"Too many files" 
  284. 2830  DATA 68,"Device unavailable" 
  285. 2840  DATA 69,"Communication buffer overflow" 
  286. 2850  DATA 70,"Disk Write Protect" 
  287. 2860  DATA 71,"Disk not ready" 
  288. 2870  DATA 72,"Disk media error" 
  289. 2880  DATA 73,"Advanced feature" 
  290. 2890  DATA 74,"Rename across disks" 
  291. 2900  DATA 75,"Path/file access error" 
  292. 2910  DATA 76,"Path not found" 
  293. 2920  DATA 77,"Unprintable error" 
  294. 2930  'INPUT.INC: Some input routines that make life easier 
  295. 2940  '            (C) Copyright 1983 Marty Franz 
  296. 2950  'PROCEDURE INITIALIZE.INPUT        'Initialize cursor and proof string
  297. 2951  DEBUG.LINE = 2950 : DEBUG.LABEL$ = "INITIALIZE.INPUT"
  298. 2952  GOSUB 800
  299. 2960  IN.CHAR$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890 " 
  300. 2970  IN.BLINK = 5 : IN.CURCNT = IN.BLINK 
  301. 2971  DEBUG.LINE = 2980
  302. 2972  GOSUB 940
  303. 2980  RETURN
  304. 2990  'PROCEDURE GET.YES.OR.NO            'Get a yes or no answer from user
  305. 2991  DEBUG.LINE = 2990 : DEBUG.LABEL$ = "GET.YES.OR.NO"
  306. 2992  GOSUB 800
  307. 3000  'ANSWER contains either YES (1) or NO (0) on exit. 
  308. 3010  IN.GOTIT = 0 : YES = 1 : NO = 0 
  309. 3020  GOSUB 3280
  310. 3030  IF NOT(IN.KEY$ = "Y") THEN 3070
  311. 3040  IN.GOTIT = 1 
  312. 3050  ANSWER = YES 
  313. 3060  GOTO 3100
  314. 3070  IF NOT(IN.KEY$ = "N") THEN 3100
  315. 3080  IN.GOTIT = 1 
  316. 3090  ANSWER = NO 
  317. 3100  IF NOT(IN.GOTIT = 1) THEN 3020
  318. 3101  DEBUG.LINE = 3110
  319. 3102  GOSUB 940
  320. 3110  RETURN
  321. 3120  'PROCEDURE GET.STRING            'Get label name for breakpoint
  322. 3121  DEBUG.LINE = 3120 : DEBUG.LABEL$ = "GET.STRING"
  323. 3122  GOSUB 800
  324. 3130  IN.INPUT$ = "" 
  325. 3140  IN.START.COL = POS(0) 
  326. 3150  GOSUB 3280
  327. 3160  IF NOT(IN.KEY$ = CHR$(13)) THEN 3190
  328. 3170  GOTO 3270
  329. 3180  GOTO 3260
  330. 3190  IF NOT(IN.KEY$ = CHR$(8)) THEN 3220
  331. 3200  GOSUB 3390
  332. 3210  GOTO 3260
  333. 3220  IF NOT(INSTR(IN.CHARS$,IN.KEY$) > 0) THEN 3250
  334. 3230  GOSUB 3350
  335. 3240  GOTO 3260
  336. 3250  BEEP 
  337. 3260  IF NOT(1 = 0) THEN 3150
  338. 3261  DEBUG.LINE = 3270
  339. 3262  GOSUB 940
  340. 3270  RETURN
  341. 3280  'PROCEDURE IN.GET.KEY             'Get uppercase key from keyboard
  342. 3281  DEBUG.LINE = 3280 : DEBUG.LABEL$ = "IN.GET.KEY"
  343. 3282  GOSUB 800
  344. 3290  GOSUB 3480
  345. 3300  IN.KEY$ = INKEY$ 
  346. 3310  IF NOT(LEN(IN.KEY$) > 0) THEN 3290
  347. 3320  IF NOT(ASC(IN.KEY$) > 96 AND ASC(IN.KEY$) < 123) THEN 3340
  348. 3330  IN.KEY$ = CHR$(ASC(IN.KEY$) - 32) 
  349. 3331  DEBUG.LINE = 3340
  350. 3332  GOSUB 940
  351. 3340  RETURN
  352. 3350  'PROCEDURE IN.INS.CHAR            'Add char to end of input string
  353. 3351  DEBUG.LINE = 3350 : DEBUG.LABEL$ = "IN.INS.CHAR"
  354. 3352  GOSUB 800
  355. 3360  PRINT IN.KEY$; 
  356. 3370  IN.INPUT$ = IN.INPUT$ + IN.KEY$ 
  357. 3371  DEBUG.LINE = 3380
  358. 3372  GOSUB 940
  359. 3380  RETURN
  360. 3390  'PROCEDURE IN.DEL.CHAR            'Handle backspace key in input
  361. 3391  DEBUG.LINE = 3390 : DEBUG.LABEL$ = "IN.DEL.CHAR"
  362. 3392  GOSUB 800
  363. 3400  IN.CUR.COL = POS(0) 
  364. 3410  IF NOT(IN.CUR.COL > IN.START.COL) THEN 3460
  365. 3420  IN.INPUT$ = LEFT$(IN.INPUT$,LEN(IN.INPUT$)-1) 
  366. 3430  PRINT " "; 
  367. 3440  LOCATE ,IN.CUR.COL-1 
  368. 3450  GOTO 3470
  369. 3460  BEEP 
  370. 3461  DEBUG.LINE = 3470
  371. 3462  GOSUB 940
  372. 3470  RETURN
  373. 3480  'PROCEDURE IN.CURSOR                'Simulate BASIC cursor
  374. 3481  DEBUG.LINE = 3480 : DEBUG.LABEL$ = "IN.CURSOR"
  375. 3482  GOSUB 800
  376. 3490  IF NOT(IN.CURCNT = IN.BLINK) THEN 3550
  377. 3500  IF NOT(IN.CURCHAR$ = CHR$(&H5F)) THEN 3530
  378. 3510  IN.CURCHAR$ = " " 
  379. 3520  GOTO 3540
  380. 3530  IN.CURCHAR$ = CHR$(&H5F) 
  381. 3540  IN.CURCNT = 0 
  382. 3550  PRINT IN.CURCHAR$; 
  383. 3560  IN.CURCNT = IN.CURCNT + 1 
  384. 3570  LOCATE ,POS(0)-1 
  385. 3571  DEBUG.LINE = 3580
  386. 3572  GOSUB 940
  387. 3580  RETURN
  388. 3590  '       SCREEN.INC: a set of sample screen formatting routines 
  389. 3600  '                    (C) Copyright 1983 Marty Franz 
  390. 3610  'PROCEDURE INITIALIZE.SCREEN 'Initialize all the screen variables
  391. 3611  DEBUG.LINE = 3610 : DEBUG.LABEL$ = "INITIALIZE.SCREEN"
  392. 3612  GOSUB 800
  393. 3620  BORDER$ = STRING$(80,&HC4) 
  394. 3630  LINE.MASK$ = SPACE$(79) 
  395. 3640  MSG.MASK$ = SPACE$(20) 
  396. 3641  DEBUG.LINE = 3650
  397. 3642  GOSUB 940
  398. 3650  RETURN
  399. 3660  'PROCEDURE CLEAR.SCREEN        'Clear the screen, set keys off    
  400. 3661  DEBUG.LINE = 3660 : DEBUG.LABEL$ = "CLEAR.SCREEN"
  401. 3662  GOSUB 800
  402. 3670  KEY OFF : CLS : WIDTH 80 
  403. 3671  DEBUG.LINE = 3680
  404. 3672  GOSUB 940
  405. 3680  RETURN
  406. 3690  'PROCEDURE SET.TITLES        'Redisplay all the titles 
  407. 3691  DEBUG.LINE = 3690 : DEBUG.LABEL$ = "SET.TITLES"
  408. 3692  GOSUB 800
  409. 3700  GOSUB 3660
  410. 3710  LOCATE 1,1                     : PRINT L.TITLE$; 
  411. 3720  LOCATE 1,80-LEN(R.TITLE$)+1     : PRINT R.TITLE$; 
  412. 3730  LOCATE 3,1                     : PRINT BORDER$ 
  413. 3731  DEBUG.LINE = 3740
  414. 3732  GOSUB 940
  415. 3740  RETURN
  416. 3750  'PROCEDURE SET.FUNCTION.MSG    'Update the function message
  417. 3751  DEBUG.LINE = 3750 : DEBUG.LABEL$ = "SET.FUNCTION.MSG"
  418. 3752  GOSUB 800
  419. 3760  LOCATE 2,1 
  420. 3770  PRINT LEFT$(FUNC.MSG$+MSG.MASK$,20); 
  421. 3771  DEBUG.LINE = 3780
  422. 3772  GOSUB 940
  423. 3780  RETURN
  424. 3790  'PROCEDURE SET.ACTION.MSG    'Update the action message
  425. 3791  DEBUG.LINE = 3790 : DEBUG.LABEL$ = "SET.ACTION.MSG"
  426. 3792  GOSUB 800
  427. 3800  LOCATE 2,61 
  428. 3810  PRINT RIGHT$(MSG.MASK$+ACT.MSG$,20); 
  429. 3811  DEBUG.LINE = 3820
  430. 3812  GOSUB 940
  431. 3820  RETURN
  432. 3830  'PROCEDURE CLEAR.AREA        'Clear lines 4 thru 23
  433. 3831  DEBUG.LINE = 3830 : DEBUG.LABEL$ = "CLEAR.AREA"
  434. 3832  GOSUB 800
  435. 3840  LOCATE 4,1 
  436. 3850  FOR CLRA.I = 4 TO 23 
  437. 3860  PRINT LINE.MASK$ 
  438. 3870  NEXT CLRA.I 
  439. 3871  DEBUG.LINE = 3880
  440. 3872  GOSUB 940
  441. 3880  RETURN
  442. 3890  'PROCEDURE SET.LINE.24        'Put a message on line 24
  443. 3891  DEBUG.LINE = 3890 : DEBUG.LABEL$ = "SET.LINE.24"
  444. 3892  GOSUB 800
  445. 3900  LOCATE 24,1 
  446. 3910  PRINT LINE.24.MSG$; 
  447. 3911  DEBUG.LINE = 3920
  448. 3912  GOSUB 940
  449. 3920  RETURN
  450. 3930  'PROCEDURE CLEAR.LINE.24        'Clear the 24th line of the screen
  451. 3931  DEBUG.LINE = 3930 : DEBUG.LABEL$ = "CLEAR.LINE.24"
  452. 3932  GOSUB 800
  453. 3940  LINE.24.MSG$ = LINE.MASK$ 
  454. 3950  GOSUB 3890
  455. 3951  DEBUG.LINE = 3960
  456. 3952  GOSUB 940
  457. 3960  RETURN
  458. 3970  'PROCEDURE DRAW.BOX            'Draw a box
  459. 3971  DEBUG.LINE = 3970 : DEBUG.LABEL$ = "DRAW.BOX"
  460. 3972  GOSUB 800
  461. 3980  LOCATE BOX.ROW,BOX.COL 
  462. 3990  PRINT CHR$(&HDA);STRING$(BOX.LEN-2,&HC4);CHR$(&HBF) 
  463. 4000  LOCATE ,BOX.COL 
  464. 4010  FOR BOX.I=1 TO BOX.HT-2 
  465. 4020  PRINT CHR$(&HB3);SPACE$(BOX.LEN-2);CHR$(&HB3) 
  466. 4030  LOCATE ,BOX.COL 
  467. 4040  NEXT BOX.I 
  468. 4050  PRINT CHR$(&HC0);STRING$(BOX.LEN-2,&HC4);CHR$(&HD9) 
  469. 4051  DEBUG.LINE = 4060
  470. 4052  GOSUB 940
  471. 4060  RETURN
  472. 4070  'PROCEDURE DRAW.FRAME        'Draw a frame (double lines)
  473. 4071  DEBUG.LINE = 4070 : DEBUG.LABEL$ = "DRAW.FRAME"
  474. 4072  GOSUB 800
  475. 4080  LOCATE FRAME.ROW,FRAME.COL 
  476. 4090  PRINT CHR$(&HC9);STRING$(FRAME.LEN-2,&HCD);CHR$(&HBB) 
  477. 4100  LOCATE ,FRAME.COL 
  478. 4110  FOR FRAME.I = 1 TO FRAME.HT-2 
  479. 4120  PRINT CHR$(&HBA);SPACE$(FRAME.LEN-2);CHR$(&HBA) 
  480. 4130  LOCATE ,FRAME.COL 
  481. 4140  NEXT FRAME.I 
  482. 4150  PRINT CHR$(&HC8);STRING$(FRAME.LEN-2,&HCD);CHR$(&HBC) 
  483. 4151  DEBUG.LINE = 4160
  484. 4152  GOSUB 940
  485. 4160  RETURN
  486. 4170  'PROCEDURE MAIN
  487. 4171  DEBUG.LINE = 4170 : DEBUG.LABEL$ = "MAIN"
  488. 4172  GOSUB 800
  489. 4180  GOSUB 3610
  490. 4190  GOSUB 2950
  491. 4200  L.TITLE$ = "CHARS - Display the IBM PC Character Set" 
  492. 4210  R.TITLE$ = "Rascal version 1.05" 
  493. 4220  GOSUB 3690
  494. 4230  FUNC.MSG$ = "Rascal Example #1" 
  495. 4240  GOSUB 3750
  496. 4250  GOSUB 4320
  497. 4260  GOSUB 3690
  498. 4270  GOSUB 3750
  499. 4280  GOSUB 4420
  500. 4290  GOSUB 4510
  501. 4300  GOSUB 4580
  502. 4301  DEBUG.LINE = 4310
  503. 4302  GOSUB 940
  504. 4310  RETURN
  505. 4320  'PROCEDURE GET.DISPLAY.TYPE
  506. 4321  DEBUG.LINE = 4320 : DEBUG.LABEL$ = "GET.DISPLAY.TYPE"
  507. 4322  GOSUB 800
  508. 4330  LOCATE 5,1 : PRINT "Is this a color-graphics display? "; 
  509. 4340  GOSUB 2990
  510. 4350  IF NOT(ANSWER = YES) THEN 4380
  511. 4360  SEGVAL! = &HB800    'Color segment 
  512. 4370  GOTO 4390
  513. 4380  SEGVAL! = &HB000    'Monochrome segment 
  514. 4390  DEF SEG = SEGVAL! 
  515. 4400  PRINT 
  516. 4401  DEBUG.LINE = 4410
  517. 4402  GOSUB 940
  518. 4410  RETURN
  519. 4420  'PROCEDURE BORDERS
  520. 4421  DEBUG.LINE = 4420 : DEBUG.LABEL$ = "BORDERS"
  521. 4422  GOSUB 800
  522. 4430  FOR HEX.DIGIT% = 0 TO 15 
  523. 4440  LOCATE 6,HEX.DIGIT% * 3 + 14 
  524. 4450  PRINT HEX$(HEX.DIGIT%) 
  525. 4460  LOCATE HEX.DIGIT%+8,8 
  526. 4470  PRINT HEX$(HEX.DIGIT%) 
  527. 4480  NEXT HEX.DIGIT% 
  528. 4490  LOCATE ,,0 
  529. 4491  DEBUG.LINE = 4500
  530. 4492  GOSUB 940
  531. 4500  RETURN
  532. 4510  'PROCEDURE BUILD.DISPLAY.ARRAY
  533. 4511  DEBUG.LINE = 4510 : DEBUG.LABEL$ = "BUILD.DISPLAY.ARRAY"
  534. 4512  GOSUB 800
  535. 4520  FOR ROW% = 0 TO 15 
  536. 4530  FOR COL% = 0 TO 15 
  537. 4540  POKE (ROW%+7)*160+COL%*6+26, COL%+ROW%*16 
  538. 4550  NEXT COL% 
  539. 4560  NEXT ROW% 
  540. 4561  DEBUG.LINE = 4570
  541. 4562  GOSUB 940
  542. 4570  RETURN
  543. 4580  'PROCEDURE FINISH
  544. 4581  DEBUG.LINE = 4580 : DEBUG.LABEL$ = "FINISH"
  545. 4582  GOSUB 800
  546. 4590  LINE.24.MSG$ = "Press any key to return to DOS..." 
  547. 4600  GOSUB 3890
  548. 4610  GOSUB 3280
  549. 4620  GOSUB 3660
  550. 4630  SYSTEM 
  551. 4631  DEBUG.LINE = 4640
  552. 4632  GOSUB 940
  553. 4640  RETURN
  554.